package com.oms.util;

import java.text.DateFormat;

/**
 * 功能：日期的工具。
 */
public class DateUtil {
	private static java.text.DateFormat m_dfDefault = DateFormat
			.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.MEDIUM,
					java.util.Locale.CHINA);

	/**
	 * 功能：日期增加天数。 创建日期：(2002-8-14 9:14:49)
	 * 
	 * @return java.util.Date
	 * @param d1
	 *            java.util.Date
	 * @param dDay
	 *            double 带小数的天数
	 */
	public static java.util.Date add(java.util.Date d1, double dDay) {
		try {
			long lDate = d1.getTime();
			long lDay = (long) (dDay * 24 * 3600 * 1000);
			return new java.util.Date(lDate + lDay);
		} catch (Throwable e) {
			System.out.println(e);
			return null;
		}
	}

	/**
	 * 功能：按四舍五入设置数据精度。 创建日期：(2002-8-14 9:45:16)
	 * 
	 * @return java.lang.String
	 * @param d
	 *            double
	 * @param iScale
	 *            int 精度
	 */
	public static String format(double d, int iScale) {
		try {
			java.math.BigDecimal big = new java.math.BigDecimal(d);
			big = big.setScale(iScale, 4);
			return big.toString();
		} catch (Throwable e) {
			System.out.println(e);
		}
		return "" + d;
	}

	/**
	 * 功能：取得应用服务器当前日期的年月日 时分秒。格式：yyyy-mm-dd hh:mm:ss 返回：String yyyy-mm-dd
	 * hh:mm:ss 2002-08-07
	 */
	public static String getCurrentFullString() {
		java.util.Date date = new java.util.Date();
		return getFullString(date);

	}

	/**
	 * 功能：取得应用服务器当前日期的时分秒。格式：hh:mm:ss 返回：String hh:mm:ss 2002-08-07
	 */
	public static String getCurrentHMS() {
		return getHMS(new java.util.Date());
	}

	/**
	 * 功能：取得应用服务器当前日期的年月日。格式：yyyy-mm-dd 返回：String yyyy-mm-dd 2002-08-07
	 */
	public static String getCurrentYMD() {
		return getYMD(new java.util.Date());
	}

	/**
	 * 功能：取得日期的年月日 时分秒。格式：yyyy-mm-dd hh:mm:ss 参数：java.util.Date 返回：String
	 * yyyy-mm-dd hh:mm:ss 2002-08-07
	 */
	public static String getFullString(java.util.Date date) {
		return getYMD(date) + " " + getHMS(date);

	}

	/**
	 * 功能：取得日期的时分秒。格式：hh:mm:ss 参数：java.util.Date 返回：String yyy-mm-dd 2002-08-07
	 */
	public static String getHMS(java.util.Date date) {
		try {
			java.util.Calendar cal = m_dfDefault.getCalendar();
			cal.setTime(date);
			int iH = cal.get(java.util.Calendar.HOUR_OF_DAY);
			int iM = cal.get(java.util.Calendar.MINUTE);
			int iS = cal.get(java.util.Calendar.SECOND);
			String str = "";
			str = (iH < 10) ? "0" + iH : "" + iH;
			str += ":" + ((iM < 10) ? "0" + iM : "" + iM);
			str += ":" + ((iS < 10) ? "0" + iS : "" + iS);
			return str;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

	}

	/**
	 * 功能：取得日期的年月日。格式：yyyy-mm-dd 参数：java.util.Date 返回：String yyy-mm-dd
	 * 2002-08-07
	 */
	public static String getYMD(java.util.Date date) {
		try {
			java.util.Calendar cal = m_dfDefault.getCalendar();
			cal.setTime(date);
			int iY = cal.get(java.util.Calendar.YEAR);
			int iM = cal.get(java.util.Calendar.MONTH) + 1;
			int iD = cal.get(java.util.Calendar.DATE);
			String str = "";
			if (iY < 50) {
				str = "" + (iY + 2000);
			} else if (iY < 100) {
				str = "" + (iY + 1900);
			} else {
				str = "" + iY;
			}
			str += "-" + ((iM < 10) ? "0" + iM : "" + iM);
			str += "-" + ((iD < 10) ? "0" + iD : "" + iD);
			return str;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

	}

	/**
	 * 此处插入方法说明。 创建日期：(2002-8-7 11:57:19)
	 * 
	 * @param args
	 *            java.lang.String[]
	 */
	public static void main(String[] args) {
		String str = "1998-04-23 22:24:7.5";
		System.out.println("指定年月日、时分秒：" + str);
		java.sql.Date d = toDate(str);
		String str2 = "1998-04-23 22:24:5";
		System.out.println("指定年月日、时分秒：" + str2);
		java.sql.Date d2 = toDate(str2);
		System.out.println(minus(d2, d));
		System.out.println(format(minus(d, d2), 2));
		System.out.println(format(minus(d, d2), 4));
		System.out.println(format(minus(d2, d), 6));
		System.out.println(minus(d, 1.2));
		System.out.println(getFullString(add(d, 1.2)));
		/*
		 * System.out.println(d); System.out.println(getYMD(d));
		 * System.out.println(getHMS(d)); System.out.println(getFullString(d));
		 * System.out.println();
		 * 
		 * /*str = "98-04-23"; System.out.println("指定年月日：" + str); d =
		 * toDate(str); System.out.println(d); System.out.println(getYMD(d));
		 * System.out.println(getHMS(d)); System.out.println(getFullString(d));
		 * System.out.println();
		 * 
		 * java.util.Date ud = new java.util.Date(); System.out.println("指定
		 * Date：" + ud); System.out.println(getYMD(ud));
		 * System.out.println(getHMS(ud));
		 * System.out.println(getFullString(ud)); System.out.println();
		 * 
		 * System.out.println("当前年月日、时分秒"); System.out.println(getCurrentYMD());
		 * System.out.println(getCurrentHMS());
		 * System.out.println(getCurrentFullString());
		 */
	}

	/**
	 * 功能：日期减去天数。 创建日期：(2002-8-14 9:14:49)
	 * 
	 * @return java.util.Date
	 * @param d1
	 *            java.util.Date
	 * @param dDay
	 *            double 带小数的天数
	 */
	public static java.util.Date minus(java.util.Date d1, double dDay) {
		try {
			long lDate = d1.getTime();
			long lDay = (long) (dDay * 24 * 3600 * 1000);
			return new java.util.Date(lDate - lDay);
		} catch (Throwable e) {
			System.out.println(e);
			return null;
		}
	}

	/**
	 * 功能：两个日期相减的天数 创建日期：(2002-8-14 9:14:49)
	 * 
	 * @return double 带小数的天数
	 * @param d1
	 *            java.util.Date
	 * @param d2
	 *            java.util.Date
	 */
	public static double minus(java.util.Date d1, java.util.Date d2) {
		long lDate1 = d1.getTime();
		long lDate2 = d2.getTime();
		long lDay = lDate1 - lDate2;
		double dDay = lDay / 24.0 / 3600.0 / 1000.0;
		return dDay;
	}

	public static java.util.Date replaceDate(String str) {
		String sNew = str.replace('/', '-');
		java.util.Date date = null;
		try {
			date = m_dfDefault.parse(sNew);
			return date;
		} catch (Exception e) {
			try {
				date = m_dfDefault.parse(sNew + " 00:00:00");
				return date;
			} catch (Exception ee) {
				ee.printStackTrace();
				return null;
			}

		}
	}

	/**
	 * 功能：字符串转换为日期。 参数：String 格式：yyyy-mm-dd or yyyy-mm-dd hh:mm:ss or yyyy/mm/dd
	 * or yyyy/mm/dd hh:mm:ss 返回：java.sql.Date 如果有字符串中时分秒就Date中也有，否则为零。
	 * 2002-08-07
	 */
	public static java.sql.Date toDate(String str) {
		try {
			return new java.sql.Date((replaceDate(str)).getTime());
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

	}

	/**
	 * 功能：字符串转换为时间日期。 参数：String 格式：yyyy-mm-dd or yyyy-mm-dd hh:mm:ss or
	 * yyyy/mm/dd or yyyy/mm/dd hh:mm:ss 返回：java.sql.Timestamp 2002-08-07
	 */
	public static java.sql.Timestamp toTime(String str) {
		try {
			return new java.sql.Timestamp((replaceDate(str)).getTime());
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
}